<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  
  
  <title>2.net | 个人博客</title>
  <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
  <meta name="description" content="http1.0 每个请求都需要建立一个tcp链接 三次握手、慢启动问题 tcp断开的问题：不会立即断开需要等待一段时间，在关闭tcp链接， 占用大量端口，可能会导致端口用尽  http1.1 keep-alive  在1个tcp链接上可以完成多个http的事物 （content-length来区分请求体） 可以复用链接 （没有每次都慢启动）请求都是串行的 （在同一个tcp通道中， 为什么不能是并发">
<meta property="og:type" content="article">
<meta property="og:title" content="2.net">
<meta property="og:url" content="https://gitee.com/wieldy/bailment-blog/2022/03/29/2.net/index.html">
<meta property="og:site_name" content="个人博客">
<meta property="og:description" content="http1.0 每个请求都需要建立一个tcp链接 三次握手、慢启动问题 tcp断开的问题：不会立即断开需要等待一段时间，在关闭tcp链接， 占用大量端口，可能会导致端口用尽  http1.1 keep-alive  在1个tcp链接上可以完成多个http的事物 （content-length来区分请求体） 可以复用链接 （没有每次都慢启动）请求都是串行的 （在同一个tcp通道中， 为什么不能是并发">
<meta property="og:locale" content="en_US">
<meta property="article:published_time" content="2022-03-29T14:12:00.000Z">
<meta property="article:modified_time" content="2023-04-23T12:11:43.650Z">
<meta property="article:author" content="John Doe">
<meta name="twitter:card" content="summary">
  
    <link rel="alternate" href="/bailment-blog/atom.xml" title="个人博客" type="application/atom+xml">
  
  
    <link rel="shortcut icon" href="/bailment-blog/favicon.png">
  
  
    
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/typeface-source-code-pro@0.0.71/index.min.css">

  
  
<link rel="stylesheet" href="/bailment-blog/css/style.css">

  
    
<link rel="stylesheet" href="/bailment-blog/fancybox/jquery.fancybox.min.css">

  
<meta name="generator" content="Hexo 6.3.0"></head>

<body>
  <div id="container">
    <div id="wrap">
      <header id="header">
  <div id="banner"></div>
  <div id="header-outer" class="outer">
    <div id="header-title" class="inner">
      <h1 id="logo-wrap">
        <a href="/bailment-blog/" id="logo">个人博客</a>
      </h1>
      
    </div>
    <div id="header-inner" class="inner">
      <nav id="main-nav">
        <a id="main-nav-toggle" class="nav-icon"></a>
        
          <a class="main-nav-link" href="/bailment-blog/">Home</a>
        
          <a class="main-nav-link" href="/bailment-blog/archives">Archives</a>
        
      </nav>
      <nav id="sub-nav">
        
          <a id="nav-rss-link" class="nav-icon" href="/bailment-blog/atom.xml" title="RSS Feed"></a>
        
        <a id="nav-search-btn" class="nav-icon" title="Search"></a>
      </nav>
      <div id="search-form-wrap">
        <form action="//google.com/search" method="get" accept-charset="UTF-8" class="search-form"><input type="search" name="q" class="search-form-input" placeholder="Search"><button type="submit" class="search-form-submit">&#xF002;</button><input type="hidden" name="sitesearch" value="https://gitee.com/wieldy/bailment-blog"></form>
      </div>
    </div>
  </div>
</header>

      <div class="outer">
        <section id="main"><article id="post-2.net" class="h-entry article article-type-post" itemprop="blogPost" itemscope itemtype="https://schema.org/BlogPosting">
  <div class="article-meta">
    <a href="/bailment-blog/2022/03/29/2.net/" class="article-date">
  <time class="dt-published" datetime="2022-03-29T14:12:00.000Z" itemprop="datePublished">2022-03-29</time>
</a>
    
  </div>
  <div class="article-inner">
    
    
      <header class="article-header">
        
  
    <h1 class="p-name article-title" itemprop="headline name">
      2.net
    </h1>
  

      </header>
    
    <div class="e-content article-entry" itemprop="articleBody">
      
        <h2 id="http1-0"><a href="#http1-0" class="headerlink" title="http1.0"></a>http1.0</h2><ul>
<li>每个请求都需要建立一个tcp链接</li>
<li>三次握手、慢启动问题</li>
<li>tcp断开的问题：不会立即断开需要等待一段时间，在关闭tcp链接， 占用大量端口，可能会导致端口用尽</li>
</ul>
<h2 id="http1-1"><a href="#http1-1" class="headerlink" title="http1.1"></a>http1.1</h2><blockquote>
<p>keep-alive</p>
</blockquote>
<p>在1个tcp链接上可以完成多个http的事物 （content-length来区分请求体） 可以复用链接 （没有每次都慢启动）<br>请求都是串行的 （在同一个tcp通道中， 为什么不能是并发？ 因为http他没有序号，也就意味着不能重组，响应和请求得有一个映射关系）<br>管线化，优化串行问题，整批提交http请求，响应还是要按照顺序来返回 ， http的队头阻塞问题 head-of-line-blocking (浏览器没有开启)<br>1个域名可以链接多个tcp链接 chrome是6个 （并发操作） 带宽竞争 固定的带宽 6个慢启动 （通过多创建几个域名来解决这些问题，域名多了要做dns解析，文件合并，雪碧图，减少请求，如果文件打包到一起，文件太大，下载慢，缓存）  http1.1增加了缓存</p>
<blockquote>
<p>http1.1 虽然增加了keep-alive (缺点 http队头阻塞,tcp队头阻塞问题，不安全明文传输，http是文本传输协议)</p>
</blockquote>
<h2 id="https"><a href="#https" class="headerlink" title="https"></a>https</h2><p>https &#x3D; http + ssl&#x2F;tls v3 改名成了 tls  (加密，让数据安全的传输)</p>
<ul>
<li><p>1.数据不能被篡改 （http无状态的） 将内容进行摘要，到时候校验摘要的内容 (SHA256)</p>
</li>
<li><p>2.让传输的数据进行加密</p>
</li>
<li><p>加密算法  对称加密AES   非对称加密RSA</p>
<ul>
<li><p>方案1： 通过客户端主动发请求来索要密钥， 密钥如果在网络中传输会被截获 （能不能别传递密钥这样不安全）</p>
</li>
<li><p>方案2: 公钥和私钥 （公钥加密，私钥解密，私钥加密，公钥解密） 服务端和客户端同时产生一对密钥（服务端的私钥和公钥，客户端的私钥个公钥），互相把公钥共享给对方，公钥加密只能私钥解密，如果出现中间人也无法解密内容。 这样就安全了？ 你怎么知道对方是真人？ 我们无法校验公钥的授予方</p>
</li>
<li><p>方案3： 优化加密方式，服务端生成一对公钥和私钥，将公钥发送给客户端，客户端生成会话密钥，用服务端提供的公钥来进行加密，传输给服务器，服务器可以解密，解密后可以拿到会话密钥，后续的操作可以采用对称加密来通信 （服务端发过来的公钥我不知是不是真的）</p>
</li>
<li><p>证书，证明你是谁，来确定公钥的发送者</p>
</li>
<li><p>ca证书，让公钥变的更信任，第三方可信任的（机构不能造假）服务端生成一对公钥和私钥，将公钥交给第三方机构，他会帮你提供一个证书<br>  （证书要包含你的“公钥”，有效期，颁发机构信息，摘要用的什么算法） -》 将证书进行一个摘要（内容小）&#x3D;》 机构也内置了一对密钥 用私钥来加密你的摘要</p>
</li>
<li><p>用户电脑中内置ca公钥，ca来解密，解密后将证书再次摘要，如果两次结果一致，就是可信任的，会通过公钥拿到证书中的公钥</p>
</li>
<li><p>服务端将公钥放到证书中， 证书会做非对称加密，客户端可以（验签）验证证书的来源，如果靠谱则可以去到服务端的公钥</p>
</li>
<li><p>付费： 你要提供一个公钥，交给付费机构，付费机构就会给你个证书，你可以将证书发送给客户端即可</p>
</li>
</ul>
</li>
</ul>
<blockquote>
<p>采用了对城和非对称 两种方式进行加密，保证公钥是服务端发送的引入了ca中</p>
</blockquote>
<p>tls 握手<br>client hello  我有哪些加密的方式（密钥交换的时候用什么方式，对称加密用什么，非对称加密用什么，摘要算法服务端）</p>
<ul>
<li>client random -&gt; 服务端<br>server hello    </li>
<li>server random -&gt; 给客户端  采用密钥的方式来通信</li>
</ul>
<blockquote>
<p>主要的目的就是，告诉对方加密的方式（如果方式固定的话 就不用这次rtt了 1.3）</p>
</blockquote>
<ul>
<li><p>server 给你一个证书 并且生成一个params 交给客户端</p>
</li>
<li><p>client 生成一个params 交给服务端</p>
</li>
<li><p>client random + server random + client params + serverParams  -&gt; 会话密钥 （后续用于加密内容的也就是做对称加密的密钥）</p>
</li>
<li><p>“DECHE” 算法 用于交换密钥  密钥交换算法，客户端和服务端通过两个参数 ，可以创建出一个会话密钥来，通过这个会话密钥可以加密内容，虽然参数暴露到了网络中，但是无法通过这两个参数 来计算出这个会话密钥</p>
</li>
</ul>
<blockquote>
<p>tls 握手过程 1） 协商中用到的加密算法  2） 交换密钥参数，生成会话密钥  3） 通过这个会话密钥加密通信</p>
</blockquote>
<h2 id="http2-0"><a href="#http2-0" class="headerlink" title="http2.0"></a>http2.0</h2><ul>
<li>http1.1 有什么问题？ 纯文本格式 ， 采用\r\n\r\n来解析内容， 在解析的过程中会有歧义 connect Connect 性能比较差， http不再采用文本格式，采用纯的二进制的方式来通信</li>
<li>http1.1 不能乱序收发 ，在请求的时候我们可以将数据直接放到管道中传输（流stream 二进制帧（流的id）） 可以直接将不同的请求塞到一个流中传输</li>
<li>http1.1 要开启多个tcp链接 消耗性能</li>
<li>多个tcp 三次握手  慢启动….</li>
</ul>
<p>http2.0 优化</p>
<ul>
<li><p>二进制方式传输</p>
</li>
<li><p>一个域名只建立一个tcp链接，一个链接中可以同时传输不同请求（http中的队头阻塞问题）， 传输内容考的是流（模型，传递的是帧，帧就是传输的单位）</p>
</li>
<li><p>二进制分针层，流量控制，优先级处理，服务端推送</p>
</li>
<li><p>头部在http1.1中 只能压缩内容 gzip br deflate, cookie(domain path) 固定的字段 content-length host… http2 中做了头部压缩 hpack</p>
</li>
<li><p>html 1&#x2F;3  css 1&#x2F;3   js 1&#x2F;3  -&gt; 流  如果中间包丢失了 后面需要前面的传递完成后再去重新发送</p>
</li>
<li><p>头部压缩  索引表 （动态表，静态表）  哈夫曼编码 （可以让编码的结果没有歧义、而且编码的结果小）</p>
</li>
</ul>
<p>如何编码 让常用的字符编码出的结果短一点 ，让不常用的长一些</p>
<p>编码的问题 a-&gt; 0 b -&gt; 1 c-&gt; 10 d-&gt; 11</p>
<p>a-&gt; 00<br>b-&gt; 01<br>c-&gt; 10<br>d-&gt; 11</p>
<p>6个字符进行编码 我需要用  111  -》 8  每个字节都得用3个位来表示</p>
<p>000<br>001<br>010<br>011<br>100<br>111<br>110<br>101</p>
<p>46 * 3 &#x3D; 138个位来表示</p>
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> http2 = <span class="built_in">require</span>(<span class="string">&#x27;node:http2&#x27;</span>);</span><br><span class="line"><span class="keyword">const</span> fs = <span class="built_in">require</span>(<span class="string">&#x27;node:fs&#x27;</span>);</span><br><span class="line"></span><br><span class="line"><span class="keyword">const</span> server = http2.<span class="title function_">createSecureServer</span>(&#123;</span><br><span class="line">  <span class="attr">key</span>: fs.<span class="title function_">readFileSync</span>(<span class="string">&#x27;localhost-privkey.pem&#x27;</span>),</span><br><span class="line">  <span class="attr">cert</span>: fs.<span class="title function_">readFileSync</span>(<span class="string">&#x27;localhost-cert.pem&#x27;</span>)</span><br><span class="line">&#125;);</span><br><span class="line">server.<span class="title function_">on</span>(<span class="string">&#x27;error&#x27;</span>, <span class="function">(<span class="params">err</span>) =&gt;</span> <span class="variable language_">console</span>.<span class="title function_">error</span>(err));</span><br><span class="line"></span><br><span class="line">server.<span class="title function_">on</span>(<span class="string">&#x27;stream&#x27;</span>, <span class="function">(<span class="params">stream, headers</span>) =&gt;</span> &#123;</span><br><span class="line">  <span class="comment">// 流是双工的</span></span><br><span class="line">  stream.<span class="title function_">respond</span>(&#123; <span class="comment">// headers frame</span></span><br><span class="line">    <span class="string">&#x27;content-type&#x27;</span>: <span class="string">&#x27;text/html; charset=utf-8&#x27;</span>,</span><br><span class="line">    <span class="string">&#x27;:status&#x27;</span>: <span class="number">200</span></span><br><span class="line">  &#125;);</span><br><span class="line">  stream.<span class="title function_">end</span>(<span class="string">&#x27;&lt;h1&gt;Hello World&lt;/h1&gt;&#x27;</span>); <span class="comment">// data frame</span></span><br><span class="line">&#125;);</span><br><span class="line"></span><br><span class="line">server.<span class="title function_">listen</span>(<span class="number">8443</span>);</span><br></pre></td></tr></table></figure>

<p><a href="/images/2.%E7%BD%91%E7%BB%9C.pdf">网络目录</a></p>

      
    </div>
    <footer class="article-footer">
      <a data-url="https://gitee.com/wieldy/bailment-blog/2022/03/29/2.net/" data-id="cljmgj1et0005zc9jhyk2ef3z" data-title="2.net" class="article-share-link">Share</a>
      
      
      
    </footer>
  </div>
  
    
<nav id="article-nav">
  
    <a href="/bailment-blog/2022/03/29/1.net/" id="article-nav-newer" class="article-nav-link-wrap">
      <strong class="article-nav-caption">Newer</strong>
      <div class="article-nav-title">
        
          1.net
        
      </div>
    </a>
  
  
    <a href="/bailment-blog/2022/03/29/Promise/" id="article-nav-older" class="article-nav-link-wrap">
      <strong class="article-nav-caption">Older</strong>
      <div class="article-nav-title">Promise</div>
    </a>
  
</nav>

  
</article>


</section>
        
          <aside id="sidebar">
  
    

  
    

  
    
  
    
  <div class="widget-wrap">
    <h3 class="widget-title">Archives</h3>
    <div class="widget">
      <ul class="archive-list"><li class="archive-list-item"><a class="archive-list-link" href="/bailment-blog/archives/2023/07/">July 2023</a></li><li class="archive-list-item"><a class="archive-list-link" href="/bailment-blog/archives/2023/06/">June 2023</a></li><li class="archive-list-item"><a class="archive-list-link" href="/bailment-blog/archives/2023/04/">April 2023</a></li><li class="archive-list-item"><a class="archive-list-link" href="/bailment-blog/archives/2023/03/">March 2023</a></li><li class="archive-list-item"><a class="archive-list-link" href="/bailment-blog/archives/2022/03/">March 2022</a></li></ul>
    </div>
  </div>


  
    
  <div class="widget-wrap">
    <h3 class="widget-title">Recent Posts</h3>
    <div class="widget">
      <ul>
        
          <li>
            <a href="/bailment-blog/2023/07/03/%E5%B7%A5%E4%BD%9C%E6%97%A5%E5%BF%97/">工作日志</a>
          </li>
        
          <li>
            <a href="/bailment-blog/2023/06/29/payMent/">payMent</a>
          </li>
        
          <li>
            <a href="/bailment-blog/2023/06/20/%E7%BD%91%E7%BA%A2%E9%9D%A2%E8%AF%95%E9%A2%98/">原理题</a>
          </li>
        
          <li>
            <a href="/bailment-blog/2023/06/19/%E5%89%8D%E7%AB%AF%E5%A4%A7%E5%B1%8F%E8%87%AA%E9%80%82%E5%BA%94%E6%96%B9%E6%B3%95/">前端大屏自适应方法</a>
          </li>
        
          <li>
            <a href="/bailment-blog/2023/06/17/10%E4%B8%AAJavaScript%E5%B8%B8%E8%A7%81%E9%AB%98%E7%BA%A7%E7%9F%A5%E8%AF%86%E7%82%B9/">10个JavaScript常见高级知识点</a>
          </li>
        
      </ul>
    </div>
  </div>

  
</aside>
        
      </div>
      <footer id="footer">
  
  <div class="outer">
    <div id="footer-info" class="inner">
      
      &copy; 2023 John Doe<br>
      Powered by <a href="https://hexo.io/" target="_blank">Hexo</a>
    </div>
  </div>
</footer>

    </div>
    <nav id="mobile-nav">
  
    <a href="/bailment-blog/" class="mobile-nav-link">Home</a>
  
    <a href="/bailment-blog/archives" class="mobile-nav-link">Archives</a>
  
</nav>
    


<script src="/bailment-blog/js/jquery-3.4.1.min.js"></script>



  
<script src="/bailment-blog/fancybox/jquery.fancybox.min.js"></script>




<script src="/bailment-blog/js/script.js"></script>





  </div>
</body>
</html>